import { getCookieJwt, setCookieJwt, removeCookieJwt } from './cookie'

export function getJwtFromCookie() {
  return getCookieJwt()
}

export function setJwtToCookie(jwt) {
  return setCookieJwt(jwt)
}

export function removeJwtFromCookie() {
  return removeCookieJwt()
}

// jwt相关函数

export function getJtiFromJwt(jwt) {
  const jwtBody = getJwtBodyFromJwt(jwt)
  return JSON.parse(jwtBody).jti
}

export function getUsernameFromJwt(jwt) {
  const jwtBody = getJwtBodyFromJwt(jwt)
  return JSON.parse(jwtBody).sub
}

export function getExpirationFromJwt(jwt) {
  const jwtBody = getJwtBodyFromJwt(jwt)
  return new Date(JSON.parse(jwtBody).exp)
}

export function isJwtExpired(jwt) {
  return new Date() > getExpirationFromJwt(jwt)
}

export function getRolesFromJwt(jwt) {
  const jwtBody = getJwtBodyFromJwt(jwt)
  return JSON.parse(jwtBody).roles
}

export function getPurviewsFromJwt(jwt) {
  const jwtBody = getJwtBodyFromJwt(jwt)
  return JSON.parse(jwtBody).purviews
}

export function getJwtBodyFromJwt(jwt) {
  if (jwt && jwt.length > 0) {
    // atob() 方法用于解码使用 base-64 编码的字符串
    // escape() 函数可对字符串进行编码， 这样就可以在所有的计算机上读取该字符串。
    // 该方法不会对 ASCII 字母和数字进行编码，
    // 也不会对下面这些 ASCII 标点符号进行编码： *@-_+./
    // 其他所有的字符都会被转义序列替换
    // decodeURIComponent() 对 encodeURIComponent() 函数编码的 URI 进行解码
    return decodeURIComponent(escape(window.atob(jwt.split('.')[1])))
  } else {
    return ''
  }
}
